﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 观察者模式
{
    /// <summary>
    /// 【主题】订阅号抽象类(此处抽象与否不重要，因为未定义抽象方法)
    /// 一旦Subject的状态发生了改变，所有的Observer都可以得到通知
    /// </summary>
    public abstract class TenXun
    {
        //保存订阅者 列表
        private List<IObserver> observers = new List<IObserver>();

        public string Symbol { get; set; }
        public string Info { get; set; }

        public TenXun(string symbol, string info)
        {
            this.Symbol = symbol;
            this.Info = info;
        }

        #region 新增对订阅者列表的维护操作
        public void AddObserver(IObserver ob)
        {
            observers.Add(ob);
        }
        public void RemoveObserver(IObserver ob)
        {
            observers.Remove(ob);
        }
        #endregion

        public void Notify()
        {
            //遍历订阅者进行 通知
            foreach (IObserver ob in observers)
            {
                if (ob != null)
                    ob.ReceiveAndPrint(this);
            }
        }
    }


    /// <summary>
    ///  具体订阅号类
    /// </summary>
    public class TenXunGame : TenXun
    {
        public TenXunGame(string symbol, string info)
            : base(symbol, info)
        {
        }
    }
}
